home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CALEMU / TNCALEMU.S < prev   
Text File  |  1995-03-20  |  15KB  |  814 lines

  1.     *.include    tnb.mac
  2. DI        macro
  3.         ori.w        #$0700,sr
  4.         .endm
  5. EI        macro
  6.         andi.w        #$F8FF,sr
  7.         .endm
  8. SUPER        macro
  9.         moveq        #$81,d0
  10.         trap        #15
  11.         .endm
  12. USER        macro
  13.         moveq        #$81,d0
  14.         trap        #15
  15.         .endm
  16.  
  17.     .include    iocscall.mac
  18.     .include    doscall.mac
  19.  
  20. _TABLET        equ    $3B
  21.  
  22. *macro    TabConChk
  23. *    moveq    #$83,d1
  24. *    IOCS    _TABLET
  25. *    tst.l    d0
  26. *    .endm
  27. TabConChk:    .macro
  28.     moveq    #_TABLET,d0
  29.     move.l    #$8001,d1
  30.     trap    #15
  31.     cmpi.w    #'TB',d0
  32.     .endm
  33.  
  34.  
  35.  
  36. StartStatio:*******************常駐部
  37. SS:
  38.     jmp    init-SS(a4)
  39. head:
  40. HEAD1 = 'CALE'
  41. HEAD2 = 'MU05'
  42.     .dc.l    HEAD1
  43.     .dc.l    HEAD2
  44.     .even
  45.  
  46. st:
  47. SET232C:*---------------------------
  48.     *    ($130)[$04C0]
  49.     *    IOCS $30 SET232C
  50.     *        RS-232Cのモード設定
  51.     *            [リターン] 前のモード
  52.  
  53. SET232C_ = $04C0.w
  54.  
  55.     clr.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  56.  
  57.     tst.w    d1
  58.     bmi    SET232C_JMP    *-1なら
  59.  
  60.     movem.l    d0-d1,-(sp)
  61.     moveq    #_TABLET,d0
  62.     move.l    #$8001,d1
  63.     trap    #15
  64.     cmpi.w    #'TB',d0
  65.     bne    @f
  66.     moveq    #_TABLET,d0
  67.     move.l    #$81FF,d1
  68.     trap    #15
  69.     cmpi.l    #$8300,d0
  70.     eori.b    #4,ccr
  71.  
  72. @@:
  73.     movem.l    (sp)+,d0-d1
  74.     bne    @f
  75.     *初期化
  76.     clr.l    _OutLg
  77.     move.l    #_OutBuf,_OutPt
  78.     move.l    #_OutBuf,_OutWt
  79.     move.w    #-1,CnChk    *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  80. @@:
  81.  
  82. SET232C_JMP:
  83.     jmp    $00000000.l
  84.  
  85.  
  86. LOF232C:*---------------------------
  87.     *    ($131)[$04C4]
  88.     *    IOCS $70 LOF232C
  89.     *        パッファ内のデータ量
  90.     *            [リターン] データ数
  91.  
  92. LOF232C_ = $04C4.w
  93.  
  94.     tst.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  95.     bne    @f
  96. LOF232C_JMP:
  97.     jmp    $00000000.l
  98. @@:
  99.     move.l    _OutLg(pc),d0
  100.     rts
  101.  
  102. INP232C:*---------------------------
  103.     *    ($132)[$04C8]
  104.     *    IOCS $70 INP232C
  105.     *        受信データ取得
  106.     *            [リターン] データ(byte)
  107.  
  108. INP232C_ = $04C8.w
  109.  
  110.     tst.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  111.     bne    @f
  112. INP232C_JMP:
  113.     jmp    $00000000.l
  114. @@:
  115.     moveq    #0,d0
  116.     tst.l    _OutLg
  117.     beq    INP_L1
  118.     move.l    a0,-(sp)
  119.     movea.l    _OutPt(pc),a0
  120.     move.b    (a0)+,d0
  121.     cmp.l    #_OutBuf_E,a0
  122.     bne    @f
  123.     move.l    #_OutBuf,a0
  124. @@:    move.l    a0,_OutPt
  125.     subq.l    #1,_OutLg
  126.     movea.l    (sp)+,a0
  127. INP_L1:    rts
  128.  
  129.  
  130. ISNS232C:*---------------------------
  131.     *    ($133)[$04CC]
  132.     *    IOCS $70 ISNS232C
  133.     *        データチェック
  134.     *            [リターン] 受信データのチェック
  135.  
  136. ISNS232C_ = $04CC.w
  137.  
  138.     tst.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  139.     bne    @f
  140. ISNS232C_JMP:
  141.     jmp    $00000000.l
  142. @@:
  143.     moveq    #0,d0
  144.     tst.l    _OutLg
  145.     beq    @f
  146.     move.l    a0,-(sp)
  147.     movea.l    _OutPt(pc),a0
  148.     move.b    (a0),d0
  149.     movea.l    (sp)+,a0
  150.     ori.l    #$010000,d0
  151. @@:    rts
  152.  
  153.  
  154. OSNS232C:*---------------------------
  155.     *    ($134)[$04D0]
  156.     *    IOCS $70 OSNS232C
  157.     *        出力可能か?
  158.     *            [リターン] 0:不可 4:可能
  159.  
  160. OSNS232C_ = $04D0.w
  161.  
  162.     movem.l    d0-d1,-(sp)
  163.     moveq    #_TABLET,d0
  164.     move.l    #$8001,d1
  165.     trap    #15
  166.     cmpi.w    #'TB',d0
  167.     bne    @f
  168.     moveq    #_TABLET,d0
  169.     move.l    #$81FF,d1
  170.     trap    #15
  171.     cmpi.l    #$8300,d0
  172.     eori.b    #4,ccr
  173. @@:    movem.l    (sp)+,d0-d1
  174.     beq    @f
  175.     clr.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  176. OSNS232C_JMP:
  177.     jmp    $00000000.l
  178. @@:
  179.     moveq    #4,d0    *送信可能
  180.     move.w    #-1,CnChk    *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  181.     rts
  182.  
  183. OUT232C:*---------------------------
  184.     *    ($135)[$04D4]
  185.     *    IOCS $70 OUT232C
  186.     *        データ送信
  187.     *            [リターン] なし
  188.  
  189. OUT232C_ = $04D4.w
  190.  
  191.     tst.w    CnChk        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  192.     bne    @f
  193. OUT232C_JMP:
  194.     jmp    $00000000.l
  195. @@:
  196.     *clr.l    _OutLg
  197.     *move.l    #_OutBuf,_OutPt
  198.     *move.l    #_OutBuf,_OutWt
  199.     movem.l    d0-d1/a0-a3,-(sp)
  200.     movea.l    _InpPt(pc),a0
  201.     movea.l    a0,a3    *記憶
  202.     move.b    d1,(a0)+
  203.     cmpa.l    #_InpBuf_E,a0
  204.     bne    @f
  205.     movea.l    #_InpBuf,a0
  206. @@:    move.l    a0,_InpPt
  207.  
  208.     cmpi.b    #'?',d1        * ?
  209.     beq    OT2C_?
  210.     cmpi.b    #$1B,d1        *ESC
  211.     beq    OT2C_ESC
  212.     cmpi.b    #'%',d1        *%
  213.     beq    OT2C_PAR
  214.     cmpi.b    #$0D,d1        *CR
  215.     beq    OT2C_CR
  216.     clr.l    _InpESC    *ESCフラグ
  217.  
  218.     bra    OUT232C_EE
  219. OT2C_?:*---[?]だったら
  220.     tst.l    _InpChPt
  221.     bne    @f
  222.  
  223.     jbsr    _MakeTable
  224.     clr.l    _InpESC    *ESCフラグ
  225. @@:    bra    OUT232C_EE
  226. OT2C_ESC:*---[ESC]だったら
  227.     move.l    #1,_InpESC    *ESCフラグON
  228.     clr.l    _InpChPt
  229.     bra    OUT232C_EE
  230. OT2C_PAR:*---[%]だったら
  231.     tst.l    _InpESC    *ESCフラグ
  232.     beq    OUT232C_EE
  233.     move.l    a3,_InpChPt    *%の位置記憶
  234.     clr.l    _InpESC    *ESCフラグ
  235.     bra    OUT232C_EE
  236. OT2C_CR:*---
  237.     clr.l    _InpESC        *ESCフラグ
  238.     tst.l    _InpChPt
  239.     beq    OUT232C_EE    *ESCがないなら終わり
  240.         *-文法解析
  241.  
  242.     bsr    _foo
  243.  
  244.     clr.l    _InpChPt
  245. OUT232C_EE:
  246.     movem.l    (sp)+,d0-d1/a0-a3
  247.     rts
  248.  
  249.  
  250.  
  251.  
  252.     .globl    _MakeTable
  253. _MakeTable:***********************
  254.     *
  255.     *    接続チェックはしておくこと
  256.     *
  257.     * _TB_POSGT  [$82]    タブレットステイタス読み込み [Tablet Mode]
  258.     *    [ In ] なし [ Out ] d0.w =SideSw.[0/255]*256+筆圧[0-126]
  259.     *                d1.l =XPos[0-1280]*65536+YPos[0-960]
  260.     *
  261.     *--JOYGET($8002)  座標値
  262.     *
  263.     *[戻り値] X*0x10000+Y (X;0-1280,Y;0-960)
  264.     *
  265.     *--JOYGET($8005)  トリガー2
  266.     *
  267.     *[戻り値] bit15:click(pen) bit14:プレス bit6-0:筆圧(変換)
  268.     *
  269.     movem.l    d0/d1/d2/d3/d7/a0,-(sp)
  270.  
  271.     .if 0
  272.         *座標無しならいらない
  273.     move.l    #$8001,d1
  274.     moveq.l    #$3B,d0
  275.     trap    #15
  276.     cmpi.l    #$00315442,d0    *'1TB'
  277.     bne    MT_EE
  278.     .endif
  279.  
  280.     lea    AFT0(pc),a0
  281.     move.l    #$8005,d1
  282.     IOCS    _TABLET
  283.     move.w    d0,d1
  284.     andi.w    #$007F,d1
  285.  
  286.  
  287.  
  288.     .if 0
  289.             *G モード 試作
  290.     beq    MT_LL1
  291.  
  292.     move.w    GPen(pc),d2    * 1以上でG-PENもーど GPenまでは筆圧1となる
  293.     beq    MT_LL1
  294.  
  295.     sub.w    d2,d1        * d2=40   p'-40
  296.     bhi    @f
  297.     moveq    #5,d1    *40未満は筆圧1
  298.     beq    MT_LL1
  299. @@:
  300.     tst.w    d1
  301.     bne    @f
  302.     moveq    #5,d1    *40調度も
  303.     beq    MT_LL1
  304. @@:                * p'=0~87
  305.     moveq    #$7F,d3        * d3=127
  306.     sub.w    d2,d3        * d3=127-40 = 87
  307.     mulu    #127-5,d1    * p'=p'*127
  308.     divu    d3,d1        * p =p'/87
  309.     bpl    @f
  310.     moveq    #0,d1
  311. @@:
  312.     addq.w    #5,d1
  313.     andi.w    #$007F,d1
  314. MT_LL1:
  315.     .endif
  316.  
  317.  
  318.     move.b    d1,8(a0)    *筆あつ
  319.  
  320.     move.b    #$80,(a0)
  321.     tst.w    d0
  322.     bpl    MT_LL3
  323.     btst.b    #0,$80E.w
  324.     bne    @f
  325.     or.b    #$08,(a0)
  326.     bra    MT_LL3
  327. @@:    or.b    #$10,(a0)
  328. MT_LL3:
  329.     btst    #14,d0
  330.     beq    MT_LL2
  331.     or.b    #$04,(a0)
  332. MT_LL2:
  333.     clr.b    6(a0)
  334.     clr.b    7(a0)
  335.     clr.b    9(a0)
  336.  
  337.     .if 0
  338.         *座標計算設定
  339.     move.l    #$8003,d1
  340.     IOCS    _TABLET
  341.     move.l    d0,d1
  342.  
  343.     move.l    d1,d7
  344.     swap    d7    *x 1280 
  345.     move.w    d7,d0
  346.     andi.b    #$7F,d0
  347.     move.b    d0,2(a0)
  348.     lsr.w    #7,d7
  349.     move.w    d7,d0
  350.     andi.b    #$7F,d0
  351.     move.b    d0,1(a0)
  352.     lsr.w    #7,d7
  353.     move.w    d7,d0
  354.     andi.b    #$03,d0
  355.     or.b    d0,(a0)
  356.     lsl.w    #1,d7
  357.     andi.b    #$18,d7
  358.     move.b    d7,3(a0)
  359.  
  360.     swap    d7    *y 960 
  361.     *move.w    #960,d0
  362.     move.w    #511,d0
  363.     sub.w    d7,d0
  364.     move.w    d0,d7
  365.  
  366.     andi.b    #$7F,d0
  367.     move.b    d0,5(a0)
  368.  
  369.     lsr.w    #7,d7
  370.     move.w    d7,d0
  371.     andi.b    #$7F,d0
  372.     move.b    d0,4(a0)
  373.  
  374.     lsr.w    #7,d7
  375.     move.w    d7,d0
  376.     andi.b    #$07,d0
  377.     or.b    d0,3(a0)
  378.     .else
  379.         *座標無し
  380.  
  381.     clr.b    1(a0)
  382.     clr.b    2(a0)
  383.     clr.b    3(a0)
  384.     clr.b    4(a0)
  385.     clr.b    5(a0)
  386.  
  387.     .endif
  388.  
  389.     pea.l    AFT0
  390.     pea.l    10.w
  391.     jbsr    _OutData
  392.     addq.w    #8,sp
  393.  
  394. MT_EE:    movem.l    (sp)+,d0/d1/d2/d3/d7/a0
  395.     rts
  396.  
  397. *---work
  398. AFT0:    .dc.b    0    **1 C4  C3  C2  C1  C0  X15 X14
  399. AFT1:    .dc.b    0    **0 X13 X12 X11 X10 X9  X8  X7
  400. AFT2:    .dc.b    0    **0 X6  X5  X4  X3  X2  X1  X0
  401. AFT3:    .dc.b    0    **0 0   PR  X17 X16 Y16 Y15 Y14
  402. AFT4:    .dc.b    0    **0 Y13 Y12 Y11 Y10 Y9  Y8  Y7
  403. AFT5:    .dc.b    0    **0 Y6  Y5  Y4  Y3  Y2  Y1  Y0
  404. AFT6:    .dc.b    0    **0 XT6 XT5 XT4 XT3 XT2 XT1 XT0
  405. AFT7:    .dc.b    0    **0 YT6 YT5 YT4 YT3 YT2 YT1 YT0
  406. AFT8:    .dc.b    0    **0 P6  P5  P4  P3  P2  P1  P0
  407. AFT9:    .dc.b    0    **0 H6  H5  H4  H3  H2  H1  H0
  408.     .even
  409.  
  410. *---work
  411. MAX equ 512
  412. MAY equ 512
  413. _AFTMAX:
  414.     .dc.b    ((MAX/$4000)&3)|$80            *//1 C4  C3  C2  C1  C0  X15 X14
  415.     .dc.b    (MAX/$80)&$7F                *//0 X13 X12 X11 X10 X9  X8  X7
  416.     .dc.b    MAX&$7F                    *//0 X6  X5  X4  X3  X2  X1  X0
  417.     .dc.b    ((MAX/$10000)&3)*8|((MAY/$4000)&7)    *//0 0   PR  X17 X16 Y16 Y15 Y14
  418.     .dc.b    (MAY/$80)&$3F                *//0 Y13 Y12 Y11 Y10 Y9  Y8  Y7
  419.     .dc.b    MAY&$7F                    *//0 Y6  Y5  Y4  Y3  Y2  Y1  Y0
  420.     .dc.b    0                    *//0 XT6 XT5 XT4 XT3 XT2 XT1 XT0
  421.     .dc.b    0                    *//0 YT6 YT5 YT4 YT3 YT2 YT1 YT0
  422.     .dc.b    0                    *//0 P6  P5  P4  P3  P2  P1  P0
  423.     .dc.b    0                    *//0 H6  H5  H4  H3  H2  H1  H0
  424.     .even
  425.  
  426.     .include    TnCALE__.s
  427.  
  428. CnChk:    .dc.w    0        *CalEmu内部用 タブレットコネクトフラグ 0:no -1:コネクト
  429. GPen:    .dc.w    64        * 1以上でG-PENもーど GPenまでは筆圧1となる
  430.  
  431.  
  432.     .globl    _OutData
  433. _OutData:*
  434.     *    Long,DATAアドレス
  435.     *    a1 破壊
  436.     *
  437.     movem.l    d0/a0/a1,-(sp)
  438.     movem.l    4+4*3(sp),d0/a0
  439.     add.l    d0,_OutLg
  440.     subq.l    #1,d0
  441.     movea.l    _OutWt(pc),a1
  442. OD_L1:    move.b    (a0)+,(a1)+
  443.     cmpa.l    #_OutBuf_E,a1
  444.     bne    @f
  445.     movea.l    #_OutBuf,a1
  446. @@:    move.l    a1,_OutWt
  447.     dbra    d0,OD_L1
  448.     movem.l    (sp)+,d0/a0/a1
  449.     rts    
  450.  
  451.  
  452. *---outputデータ
  453. _OutPt:
  454.     .dc.l    _OutBuf    *出力パッファ ポインタ
  455. _OutWt:
  456.     .dc.l    _OutBuf    *パッファ末 ポインタ
  457. _OutLg:
  458.     .dc.l    0    *出力待ち文字数
  459. _OutBuf:
  460.     .ds.b    32
  461.     .even
  462. _OutBuf_E:
  463.  
  464. *---inputデータ
  465. _InpESC:
  466.     .dc.l    0        *ESCフラグ
  467. _InpChPt:
  468.     .dc.l    0        *チェック開始ポインタ ('%'の場所)
  469. _InpPt:
  470.     .dc.l    _InpBuf        *管理ポインタ
  471. _InpBuf:
  472.     .ds.b    32
  473.     .even
  474. _InpBuf_E:
  475.     .dc.l    _InpBuf_E-_InpBuf
  476.  
  477.  
  478. EndStatio:*******************常駐部
  479.  
  480.  
  481. MarkerChk:*----------------------------------------
  482.     *    a0 アドレス
  483.     *
  484.     *[戻り値] bne ちがう
  485.     *      beq あっている
  486.     cmpa.l    #$00F00000,a0
  487.     bcc    @f
  488.     cmp.l    #HEAD1,(a0)
  489.     bne    @f
  490.     cmp.l    #HEAD2,4(a0)
  491.     bne    @f
  492.     cmpa.l    a0,a0        *z=1
  493. @@:
  494.     rts
  495.  
  496.  
  497. InvChk:*----------------------------------------
  498.     *    a0.l==なら非常駐
  499.     *    a0.l!=なら常駐
  500.     movea.l    (a0),a0            *一つ前のポインタ
  501.     cmpa.l    #$00F00000,a0
  502.     bcc    IC1
  503.     cmp.l    #HEAD1,$0104(a0)
  504.     bne    @f
  505.     cmp.l    #HEAD2,$0108(a0)
  506.     bne    @f
  507.     adda.w    #$100,a0    **[SS]のポインタ
  508.     rts
  509. @@:                    **違う
  510.     tst.l    (a0)            *一つ前のポインタ
  511.     bne    InvChk            *0でない(上へ)
  512. IC1:    sub.l    a0,a0    *非常駐
  513.     rts
  514.  
  515.  
  516. AtoI:*----------------------------------------
  517.     *    a2 アドレス
  518.     *[戻り値] d0.l 数字
  519.     moveq    #0,d0
  520. @@:    move.b    (a2)+,d2
  521.     subi.b    #'0',d2
  522.     bcs    AIr
  523.     cmpi.b    #9,d2
  524.     bhi    AIr
  525.     andi.l    #$0000FF,d2
  526.     mulu    #10,d0
  527.     add.l    d2,d0
  528.     bra    @b
  529. AIr:    subq    #1,a2
  530.     rts
  531.  
  532.  
  533. init:*------------------------------------------------------------------
  534.     lea    usrsp,sp
  535.     pea    LR1(pc)
  536.     DOS    _PRINT
  537.     addq.w    #4,sp
  538.     ** 常駐チェック **
  539.     suba.l    a1,a1
  540.     SUPER
  541.     movea.l    d0,a1
  542.     moveq    #0,d1
  543.     bsr    InvChk
  544.     movea.l    a0,a3        *常駐先頭アドレス
  545.  
  546.     movea.l    SET232C_,a0
  547.     subq    #SET232C-head,a0
  548.     bsr    MarkerChk
  549.     bne    @f
  550.     bset    #0,d1
  551.  
  552. @@:    movea.l    LOF232C_,a0
  553.     suba    #LOF232C-head,a0
  554.     bsr    MarkerChk
  555.     bne    @f
  556.     bset    #1,d1
  557. @@:
  558.     movea.l    INP232C_,a0
  559.     suba    #INP232C-head,a0
  560.     bsr    MarkerChk
  561.     bne    @f
  562.     bset    #2,d1
  563. @@:
  564.     movea.l    ISNS232C_,a0
  565.     suba    #ISNS232C-head,a0
  566.     bsr    MarkerChk
  567.     bne    @f
  568.     bset    #3,d1
  569. @@:
  570.     movea.l    OSNS232C_,a0
  571.     suba    #OSNS232C-head,a0
  572.     bsr    MarkerChk
  573.     bne    @f
  574.     bset    #4,d1
  575. @@:
  576.     movea.l    OUT232C_,a0
  577.     suba    #OUT232C-head,a0
  578.     bsr    MarkerChk
  579.     bne    @f
  580.     bset    #5,d1
  581. @@:                *d1に常駐状態
  582.     USER
  583.  
  584.     ** 常駐していたらそのデータを引用 **
  585.     move.l    a3,d0
  586.     beq    conl
  587.     move.w    GPen-SS(a3),GPen
  588.  
  589. conl:    ** コマンドラインチェック **
  590.     tst.b    (a2)+        *スキップ
  591. sw:    move.b    (a2)+,d0
  592.     beq    keep
  593.     cmpi.b    #' ',d0
  594.     beq    sw
  595.     cmpi.b    #$09,d0        *tab
  596.     beq    sw
  597.     cmpi.b    #'-',d0
  598.     beq    swc
  599.     cmpi.b    #'/',d0
  600.     beq    swc
  601. swe:    pea    LR6(pc)
  602.     bra    PE    *end
  603. swc:    **スイッチ判断
  604.     move.b    (a2)+,d0
  605.     beq    swe
  606.     cmpi.b    #'?',d0
  607.     beq    help
  608.     ori.b    #$20,d0    *小文字化!
  609.     cmpi.b    #'r',d0
  610.     beq    free
  611.     cmpi.b    #'g',d0
  612.     beq    gswc
  613.     cmpi.b    #'m',d0
  614.     beq    mswc
  615.     cmpi.b    #'h',d0
  616.     beq    help
  617. swcerr:    pea    LR7(pc)
  618.     bra    PE    *end
  619.  
  620.  
  621. gswc:******************
  622.     bsr    AtoI
  623.     cmpi.l    #128,d0
  624.     bcc    swcerr
  625.     move.w    d0,GPen        *G-PENエミュ(def.64)
  626.     bra    sw
  627.  
  628. mswc:******************
  629.     clr.w    GPen        *G-PENエミュ(def.64)
  630.     bra    sw
  631.  
  632. help:******************
  633.     pea    LRH(pc)
  634.     bra    PE    *end
  635.  
  636.  
  637. keep:    ************************** 常駐させる
  638.     move.l    #$8000,d1
  639.     IOCS    _TABLET
  640.     cmpi.w    #$5442,d0
  641.     beq    @f
  642.         *TnTABLETが常駐していない!
  643.     pea    LRTTN(pc)
  644.     bra    PE    *end
  645. @@:
  646.     swap    d0
  647.     cmpi.w    #$0092,d0
  648.     bcc    @f
  649.         *TnTABLETが古い!
  650.     pea    LRTTO(pc)
  651.     bra    PE    *end
  652. @@:        *TnTABLETのモード変更
  653.     move.l    #$8080,d1    *ボタン機能 ノーマル
  654.     IOCS    _TABLET
  655.     move.l    #$8090,d1    *ジョイスティックエミュ禁止
  656.     IOCS    _TABLET
  657.     move.l    #$8281,d1    *1: CRTMODによる移動範囲を判別。
  658.     IOCS    _TABLET
  659.     move.l    #$80A3,d1    *3: キーによる機能あり
  660.     IOCS    _TABLET
  661.     move.l    #$81FF,d1    *モードチェック
  662.     IOCS    _TABLET
  663.     cmpi.l    #$8300,d0
  664.     bne    @f
  665.     move.l    #$8100,d0
  666. @@:    move.l    d0,d1        *モード設定
  667.     IOCS    _TABLET
  668.  
  669.  
  670.     move.l    a3,d0
  671.     beq    @f
  672.         *既に常駐、設定変更
  673.  
  674.     move.w    GPen(pc),GPen-SS(a3)
  675.     bsr    keepsub
  676.     pea    LR5(pc)
  677.     bra    PE    *end
  678. @@:
  679.     **セット
  680.     suba.l    a1,a1
  681.     SUPER
  682.     movea.l    d0,a1
  683.  
  684.     move.l    SET232C_,SET232C_JMP+2
  685.      lea    SET232C-SS(a4),a0
  686.      move.l    a0,SET232C_
  687.      *move.l    #SET232C,SET232C_
  688.     move.l    LOF232C_,LOF232C_JMP+2
  689.      lea    LOF232C-SS(a4),a0
  690.      move.l    a0,LOF232C_
  691.     move.l    INP232C_,INP232C_JMP+2
  692.      lea    INP232C-SS(a4),a0
  693.      move.l    a0,INP232C_
  694.     move.l    ISNS232C_,ISNS232C_JMP+2
  695.      lea    ISNS232C-SS(a4),a0
  696.      move.l    a0,ISNS232C_
  697.     move.l    OSNS232C_,OSNS232C_JMP+2
  698.      lea    OSNS232C-SS(a4),a0
  699.      move.l    a0,OSNS232C_
  700.     move.l    OUT232C_,OUT232C_JMP+2
  701.      lea    OUT232C-SS(a4),a0
  702.      move.l    a0,OUT232C_
  703.  
  704.     USER
  705.  
  706.     bsr    keepsub
  707.  
  708.     pea    LRKP(pc)
  709.     DOS    _PRINT
  710.     addq    #4,sp
  711.     clr.w    -(sp)
  712.     move.l    #EndStatio-StartStatio,-(sp)
  713.     DOS    _KEEPPR
  714.  
  715.     ****************
  716. keepsub:
  717.     pea    LR2(pc)
  718.     DOS    _PRINT
  719.     addq    #4,sp
  720.  
  721. *    lea    LMMO(pc),a0
  722. *    move.w    GPen(pc),d0        *ボタンモード
  723. *    beq    @f
  724. *    lea    LGMO(pc),a0
  725. *@@:
  726. *    move.l    a0,-(sp)
  727. *    DOS    _PRINT
  728. *    addq    #4,sp
  729.     rts
  730.  
  731. free:    *****************************常駐解除
  732.     move.l    a3,d0
  733.     bne    @f
  734.     pea    LR8(pc)        **非常駐
  735.     bra    PE    *end
  736.  
  737. @@:    cmpi.w    #$3F,d1
  738.     beq    @f
  739.     pea    LR4(pc)        **ベクタが占領
  740.     bra    PE    *end
  741.  
  742. @@:    suba.l    a1,a1
  743.     SUPER
  744.     movea.l    d0,a1
  745.  
  746.     move.l    (SET232C_JMP-SS)+2(a3),SET232C_
  747.     move.l    (LOF232C_JMP-SS)+2(a3),LOF232C_
  748.     move.l    (INP232C_JMP-SS)+2(a3),INP232C_
  749.     move.l    (ISNS232C_JMP-SS)+2(a3),ISNS232C_
  750.     move.l    (OSNS232C_JMP-SS)+2(a3),OSNS232C_
  751.     move.l    (OUT232C_JMP-SS)+2(a3),OUT232C_
  752.  
  753.     USER
  754.  
  755.     sub.l    #$00000F0,a3
  756.     move.l    a3,-(sp)
  757.     DOS    _MFREE
  758.     addq    #4,sp
  759.  
  760.     pea    LR3(pc)
  761. PE:    DOS    _PRINT
  762.     addq.w    #4,sp
  763.     DOS    _EXIT
  764.  
  765. LRKP:    .dc.b    ' 常駐しました。',$0d,$0a,0
  766.     .even
  767. LR3:    dc.b    ' 常駐解除しました。',$0d,$0a,0
  768.     .even
  769. LR4:    dc.b    ' ベクタが占領されています。',$0d,$0a,0
  770.     .even
  771. LR5:    .dc.b    ' TnTABLET系ドライバの設定を変更しました。',$0d,$0a,0
  772.     .even
  773. LR6:    .dc.b    ' コマンドラインが異常です。',$0d,$0a,0
  774.     .even
  775. LR7:    .dc.b    ' スイッチが異常です。',$0d,$0a,0
  776.     .even
  777. LR8:    .dc.b    ' 常駐していません。',$0d,$0a,0
  778.     .even
  779. LRTTN:    .dc.b    ' TnTABLET系ドライバが常駐していません。常駐して下さい。',$0d,$0a,0
  780.     .even
  781. LRTTO:    .dc.b    ' TABLET CALLのバージョンが古いです。',$0d,$0a,0
  782.     .even
  783. *LMMO:    .dc.b    ' 毛筆感筆圧でエミュレートします。',$0d,$0a,0
  784. *    .even
  785. *LGMO:    .dc.b    ' Gペンっぽい筆圧でエミュレートします。',$0d,$0a,0
  786. *    .even
  787.  
  788. LRH:
  789.     .dc.b    $0d,$0a
  790.     .dc.b    '使用法:CALEMU.x [switch]',$0d,$0a
  791.     .dc.b    '    /R ・・・・ 常駐解除します。',$0d,$0a
  792.     *.dc.b    '    /M ・・・・ 毛筆感筆圧でエミュレートします。',$0d,$0a
  793.     *.dc.b    '    /G[n] ・ Gペンっぽい筆圧でエミュレートします。',$0d,$0a
  794.     .dc.b    $0d,$0a,0
  795.     .even
  796. LR1:    dc.b    'CalcompTablet Emu. for TnTABLET系 Version 0.10 Copyright 1994 1995 TNB製作所',$0d,$0a,0
  797.     .even
  798. LR2:    dc.b    ' TnTABLET系ドライバのタブレットでカルコンプタブレットエミュレートします',$0d,$0a
  799.     dc.b    '    ★筆圧のみエミュレート、マチエールなら大丈夫バージョン★',$0d,$0a
  800.     .dc.b    0
  801.     .even
  802.  
  803. *
  804. *    見ての通りかなりREM文があり見苦しい物があります。
  805. *    再コンパイルは、途中に Cソースを入れるため面倒に
  806. *    なってます。ご了承ください
  807. *
  808.  
  809.     .ds.b    2048
  810. usrsp:
  811.  
  812.  
  813.  
  814.